package logica;

import java.util.GregorianCalendar;

import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;

import persistencia.FabricaPersistenciaAgencia;
import persistencia.IPersistenciaVentaAgencia;
import webservice.WebServiceImmService;
import datatypes.DataTicket;
import datatypes.DataTicketVendido;



public class LogicaVentaAgencia implements ILogicaVentaAgencia {

	private static LogicaVentaAgencia instance =null; //variable para crear la instancia de la logica venta agencia
	
	private LogicaVentaAgencia(){
		
	}
	
	public static LogicaVentaAgencia getInstance(){
		
		if(instance == null){ //verifica si existe una instancia de la logica, sino devuelve la creada anteriormente
			instance = new LogicaVentaAgencia();			
		}else{instance = new LogicaVentaAgencia();}
		return instance;
	}
		
	@Override
	public DataTicketVendido ventaTicket(DataTicket unDataTicket) {
		DataTicketVendido dtv = new DataTicketVendido(0,0,1,"Error, al validar la terminal de la agencia (En Agencia)");
		try{
			IPersistenciaVentaAgencia i = FabricaPersistenciaAgencia.getPersistenciaVentaAgencia();
			boolean terminal = i.validarTerminal(unDataTicket);
			if(terminal == true){
				WebServiceImmService ws =new WebServiceImmService();
				webservice.DataTicket wsdt = new webservice.DataTicket();
				wsdt.setCantMin(unDataTicket.getCant_min());
				System.out.println("ServidorAgencia.Logica.LogicaVentaAgencia.  Advertencia grabar fecha en logica Venta Agencia");
				
				GregorianCalendar fechaI = new GregorianCalendar();
				fechaI.setTime(unDataTicket.getFecha_inicio());
				XMLGregorianCalendar fechaInicio = DatatypeFactory.newInstance().newXMLGregorianCalendar(fechaI);
				wsdt.setFechaInicio(fechaInicio);
				
				GregorianCalendar fechaV = new GregorianCalendar();
				fechaV.setTime(unDataTicket.getFecha_venta());
				XMLGregorianCalendar fechaVenta = DatatypeFactory.newInstance().newXMLGregorianCalendar(fechaV);
				wsdt.setFechaVenta(fechaVenta);
				
				//wsdt.setFechaInicio(unDataTicket.getFecha_inicio());
				//wsdt.setFechaVenta(unDataTicket.getFecha_venta());
				wsdt.setIdAgencia(unDataTicket.getId_agencia());
				wsdt.setIdTerminal(unDataTicket.getId_terminal());
				wsdt.setMatricula(unDataTicket.getMatricula());
				webservice.DataTicketVendido wsdtv = ws.getWebServiceImmPort().venderTicket(wsdt);
				
				dtv.setDescripcionRespuesta(wsdtv.getDescripcionRespuesta());
				dtv.setIdRespuesta(wsdtv.getIdRespuesta());
				dtv.setIdTicket(wsdtv.getIdTicket());
				dtv.setImporte(wsdtv.getImporte());				
				
			 	boolean grabar = i.guardarTicket(dtv, unDataTicket);
			 	if(grabar == true)
			 	return dtv;
			}else{
				//Se seteo al comienzo "Error, al validar la terminal de la agencia (En Agencia)"
			}
		} catch (Exception e){
			System.out.println("ServidorAgencia.Logica.LogicaVentaAgencia.  Error, no se obtuvo la conexion con la bd de la agencia");
			e.printStackTrace();
		}		 	
		return dtv;
	}

	
}
